package com.itlong.cloud.commons.dao;

import com.itlong.cloud.POJO.PO.AppUserAccountBalancePO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

/**
 * <desc>
 *     账户余额及扣费数据库访问接口
 * </desc>
 *
 * @createDate 2018/4/23
 */

@Mapper
@Repository
public interface IAccountBalanceDao {


    /**
     * <desc>
     *      根据userId查询余额
     * <desc/>
     * @param  params   带查询的userId
     * @return 余额
     * @author Juguang.S
     * @createDate 2018/4/23
     */
    AppUserAccountBalancePO getBalanceByParams(Map<String, Object> params);

    /**
     * <desc>
     *     一卡通扣费
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Juguang.S
     * @createDate 2018/4/23
     */
    Integer updateByUserId(Map<String, Object> params);

    /**
     * <desc>
     *     人脸识别扣费
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Juguang.S
     * @createDate 2018/4/23
     */
    Integer updateByFaceId(Map<String, Object> params);

    /**
     * <desc>
     *     根据cardId查询当前用户
     * </desc>
     * @return
     * @author Juguang.S
     * @createDate 2018/4/24
     */
    String getCardUserId(@Param("cardId") String cardId);

    /**
     * <desc>
     *     根据faceId查询当前用户
     * </desc>
     * @return
     * @author Juguang.S
     * @createDate 2018/4/24
     */
    String getUserId(@Param("faceId") String faceId);

    /**
     * <desc>
     *     充值后更新账户余额表中的金额
     * </desc>
     * @return
     * @author Juguang.S
     * @createDate 2018/4/24
     */
    Integer updateAccountBalance(@Param("price") BigDecimal price, @Param("userId") String userId, @Param("updateTime") Date updateTime);

    /**
     * <desc>
     *      保存账户余额
     * <desc/>
     *
     * @param  params
     * @return
     * @author Juguang.S
     * @createDate 2018/4/25
     */
    void save(Map<String, Object> params);

    /**
     * <desc>
     *      更新余额流水来源id
     * </desc>
     *
     * @param recordId 流水id
     * @param sourceId 来源id
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/28
     */
    public Integer updateTradeSourceId(@Param("recordId") String recordId,@Param("sourceId") String sourceId);

    /**
     * <desc>
     *      根据账单ID查询月卡订单的截止时间
     * </desc>
     *
     * @param billId 订单id
     * @return
     * @author Juguang.S
     * @createDate 2018/11/12
     */
    String getMonthCardTime(@Param("billId") String billId);
}
